Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add an inaccurate, basic Archimedes. #1355

Merged
merged 235 commits into from
Apr 17, 2024
Merged

Add an inaccurate, basic Archimedes. #1355

merged 235 commits into from
Apr 17, 2024

Conversation

TomHarte
Copy link
Owner

@TomHarte TomHarte commented Mar 4, 2024

Archimedes objective: a high-level CPU emulation with low-level emulated support components. At least as a first step.

Additionally cleans up several compiler warnings for CI platforms.

Included ARM fixes:

  • only the lowest byte of a register affects shift-by-register quantities;
  • a 0-size immediate rotation that sets carry copies the highest bit of the value [not] being rotated;
  • flags are set properly for R15 destination data processing operations;
  • LDR to an address register with writeback prefers the value read to the writeback;
  • exceptions and BL include status bits in the value placed into R14;
  • exceptions retain the proper mode in the value placed into R14 ad pick an appropriate PC offset based on the exception type*;
  • block writes handle decrementing addresses properly, use the load PSR flag for user-register selection during STM and properly handle write back versus registers included in the transfer list (including not conflating registers of the same number from different modes).

* since I'm trying to maintain an implementation separation between my version of ARM operations and any specific ARM implementation I want this to be codified separately rather than flowing naturally from the ARM2's pipeline.

@TomHarte
Copy link
Owner Author

TomHarte commented Apr 9, 2024

Surprisingly, that seemed just to work:

Clock Signal Screen Shot 08-04-2024, 21 22 59 GMT-4

So, off the top of my head, definite outstanding issues:

  • the mouse cursor over the border both looks wrong and actually stops the left-hand 16 pixels of the display from being reachable in RISC OS; and
  • sound isn't currently being output.

@TomHarte
Copy link
Owner Author

With the cursor still not appearing correctly over the borders but now always correctly positioned on the display, I think I'm happy to say that adding audio is the sole remaining item before I merge this to master and start dealing with dangling issues as follow-ups.

@TomHarte TomHarte marked this pull request as ready for review April 17, 2024 02:34
@TomHarte TomHarte merged commit 87d1a47 into master Apr 17, 2024
8 checks passed
@TomHarte TomHarte deleted the Archimedes branch April 17, 2024 02:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants